﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using kinokasse.datamodel.contracts;

namespace kinokasse.saalplanview.tests
{
	public partial class TestForm : Form
	{
		private readonly List<Sitz> gewählteSitze = new List<Sitz>();

		public TestForm()
		{
			InitializeComponent();
		}

		private void SaalplanView_Out_SitzGewählt( Sitz sitz )
		{
			if( gewählteSitze.Contains( sitz ) )
			{
				gewählteSitze.Remove( sitz );
			}
			else
			{
				gewählteSitze.Add( sitz );
			}

			SaalplanView.In_SitzeGewählt( gewählteSitze );
		}

		private void KleinesKino_Click( object sender, EventArgs e )
		{
			gewählteSitze.Clear();
			var sitze = new Collection<Sitz>
			{
				new Sitz( "A", 1, new Point( 0, 2 ), "A" ),
				new Sitz( "B", 1, new Point( 1, 1 ), "B" ),
				new Sitz( "B", 2, new Point( 1, 2 ), "B" ),
				new Sitz( "B", 3, new Point( 1, 3 ), "B" ),
				new Sitz( "C", 1, new Point( 2, 0 ), "C" ),
				new Sitz( "C", 2, new Point( 2, 1 ), "C" ),
				new Sitz( "C", 3, new Point( 2, 2 ), "C" ),
			};
			var saalplan = new Saalplan( sitze );
			SaalplanView.In_Anzeigen( saalplan );
		}

		private void Lücken_Click( object sender, EventArgs e )
		{
			gewählteSitze.Clear();
			var sitze = new Collection<Sitz>
			{
				new Sitz( "A", 1, new Point( 0, 0 ), "A" ),
				new Sitz( "H", 8, new Point( 7, 7 ), "B" ),
			};
			var saalplan = new Saalplan( sitze );
			SaalplanView.In_Anzeigen( saalplan );
		}

		private void GroßesKino_Click( object sender, EventArgs e )
		{
			gewählteSitze.Clear();
			var sitze = new Collection<Sitz>
			{
				new Sitz( "A", 1, new Point( 0, 2 ), "A" ),
				new Sitz( "B", 1, new Point( 1, 1 ), "A" ),
				new Sitz( "B", 2, new Point( 1, 2 ), "A" ),
				new Sitz( "B", 3, new Point( 1, 3 ), "A" ),
				new Sitz( "C", 1, new Point( 2, 0 ), "B" ),
				new Sitz( "C", 2, new Point( 2, 1 ), "B" ),
				new Sitz( "C", 3, new Point( 2, 2 ), "B" ),
				new Sitz( "C", 4, new Point( 2, 3 ), "B" ),
				new Sitz( "C", 5, new Point( 2, 4 ), "B" ),
				new Sitz( "C", 6, new Point( 2, 5 ), "B" ),
				new Sitz( "C", 7, new Point( 2, 7 ), "B" ),
				new Sitz( "C", 8, new Point( 2, 8 ), "B" ),
				new Sitz( "C", 9, new Point( 2, 9 ), "B" ),
				new Sitz( "C", 10, new Point( 2, 10 ), "C" ),
				new Sitz( "C", 11, new Point( 2, 11 ), "C" ),
				new Sitz( "C", 12, new Point( 2, 14 ), "C" ),
				new Sitz( "C", 13, new Point( 2, 15 ), "C" ),
				new Sitz( "C", 14, new Point( 2, 16 ), "C" ),
				new Sitz( "C", 15, new Point( 2, 17 ), "C" ),
				new Sitz( "C", 16, new Point( 2, 20 ), "C" ),
				new Sitz( "C", 17, new Point( 2, 21 ), "B" ),
				new Sitz( "C", 18, new Point( 2, 24 ), "B" ),
				new Sitz( "C", 19, new Point( 2, 25 ), "B" ),
			};
			var saalplan = new Saalplan( sitze );
			SaalplanView.In_Anzeigen( saalplan );
		}

        private void btnBuchen_Click(object sender, EventArgs e) {
            var buchungen = gewählteSitze.Select(sitz => new Buchung(sitz.Nummer, sitz.Reihe, ""));
            SaalplanView.In_AktuelleBuchungen(buchungen);
        }
	}
}
